/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.http.HttpSession;
import util.Criptografia;

/**
 *
 * @author gabrielbmoro
 */
public class Usuario extends DML {

    protected String login;
    protected String senha;
    protected String email;
    protected Universidade universidade;
    protected String nome;
    private TipoDeUsuario tipoDeUsuario;

    /**
     * Em construção
     *
     * @param login
     * @param senha
     * @return
     */
    public boolean fazerLogin(HttpSession httpSession, String login, String senha) {
        this.login = login;
        try {
            this.senha = Criptografia.md5(senha);
        } catch (NoSuchAlgorithmException erro) {
        }

        int idAluno = verificaIdAluno();
        int idProfessor = verificaIdProfessor();
        int idMembroExterno = verificaIdMembroExterno();

        if (idAluno != 0) {
            httpSession.setAttribute("idUser", idAluno);
            this.tipoDeUsuario = TipoDeUsuario.ALUNO;
            return true;
        }
        if (idProfessor != 0) {
            httpSession.setAttribute("idUser", idProfessor);
            this.tipoDeUsuario = TipoDeUsuario.PROFESSOR;
            return true;
        }
        if (idMembroExterno != 0) {
            httpSession.setAttribute("idUser", idMembroExterno);
            this.tipoDeUsuario= TipoDeUsuario.MEMBRO_EXTERNO;
            return true;
        }
        return false;
    }

    public ArrayList<String> acessarPerfil(int id) {
        return null;
    }

    private int verificaIdProfessor() {
        String sql = "select idprofessor from professor WHERE siape='" + this.login + "' and senha='" + this.senha + "';";
        try {
            this.conecta = ConectaBD.getInstance();
            super.statement = this.conecta.getConnection().createStatement();
            super.resultSet = super.statement.executeQuery(sql);
            int result = 0;
            while (super.resultSet.next()) {
                result = super.resultSet.getInt(1);
            }
            super.resultSet.close();
            super.statement.close();
            return result;
        } catch (SQLException sqlErro) {
            sqlErro.printStackTrace();
        }
        return 0;
    }

    private int verificaIdAluno() {//manda o teu email para a thaíse, 99556607- enf.daione,não esquece de comunicar dr heleno
        String sql = "select idaluno from aluno WHERE matricula='" + this.login + "' and senha='" + this.senha + "';";
        try {
            this.conecta = ConectaBD.getInstance();
            super.statement = this.conecta.getConnection().createStatement();
            super.resultSet = super.statement.executeQuery(sql);
            int result = 0;
            while (super.resultSet.next()) {
                result = super.resultSet.getInt(1);
            }
            super.resultSet.close();
            super.statement.close();
            return result;
        } catch (SQLException sqlErro) {
            sqlErro.printStackTrace();
        }
        return 0;
    }

    private int verificaIdMembroExterno() {
        String sql = "select idmembroexterno from membroexterno WHERE cpf='" + this.login + "' and senha='" + this.senha + "';";
        try {
            this.conecta = ConectaBD.getInstance();
            super.statement = this.conecta.getConnection().createStatement();
            super.resultSet = super.statement.executeQuery(sql);
            int result = 0;
            while (super.resultSet.next()) {
                result = super.resultSet.getInt(1);
            }
            super.resultSet.close();
            super.statement.close();
            return result;
        } catch (SQLException sqlErro) {
            sqlErro.printStackTrace();
        }
        return 0;
    }

    public boolean deslogar() {
        return false;
    }

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the universidade
     */
    public Universidade getUniversidade() {
        return universidade;
    }

    /**
     * @param universidade the universidade to set
     */
    public void setUniversidade(Universidade universidade) {
        this.universidade = universidade;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the tipoDeUsuario
     */
    public TipoDeUsuario getTipoDeUsuario() {
        return tipoDeUsuario;
    }
}
